﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;

namespace ActionTrackerEntities
{
    public class Proyecto
    {
        public Proyecto()
        {
            Usuarios = new List<Usuario>();
            Reuniones = new List<Reunion>();
            Acciones = new List<Accion>();
        }

        public virtual int IdProyecto { get; set; }

        [Display(Name = "Objetivo"), StringLength(100,ErrorMessage="El objetivo no debe exceder los 100 caracteres")]
        [Required(ErrorMessage="El objetivo es requerido")]
        [DataType(DataType.Text, ErrorMessage = "El objetivo no es válido")]
        public virtual string Objetivo { get; set; }

        [Display(Name="Fecha de creación")]
        [DataType(DataType.DateTime,ErrorMessage="La fecha no es válida")]
        [Required(ErrorMessage="La fecha es requerida")]
        public virtual DateTime FechaCreacion { get; set; }

        [Display(Name = "Fecha de baja")]
        [DataType(DataType.DateTime, ErrorMessage = "La fecha no es válida")]
        [Required(ErrorMessage = "La fecha es requerida")]
        public virtual DateTime? FechaBaja { get; set; }

        [Display(Name="Miembros")]
        public virtual IEnumerable<Usuario> Usuarios { get; set; }
        
        public virtual IEnumerable<Reunion> Reuniones { get; set; }
        public virtual IEnumerable<Accion> Acciones { get; set; }

        
        public virtual int CantUsuarios 
        { 
            get { return Usuarios != null ? Usuarios.Count() : 0; } 
        }
        public virtual int CantAccionesAbiertas
        {
            get { return Acciones != null && Acciones.FirstOrDefault() != null ? Acciones.Count(x => x.EstadoAccion == (int) EstadoAccionEnum.Abierta && x.FechaVencimiento > DateTime.Now) : 0; }
        }
        public virtual int CantAccionesCerradas
        {
            get { return Acciones != null && Acciones.FirstOrDefault() != null ? Acciones.Count(x => x.EstadoAccion == (int)EstadoAccionEnum.Cerrada) : 0; }
        }
        public virtual int CantAcccionesVencidas
        {
            get { return Acciones != null && Acciones.FirstOrDefault() != null ? Acciones.Count(x => x.FechaVencimiento <= DateTime.Now && x.EstadoAccion == (int)EstadoAccionEnum.Abierta) : 0; }
        }
    }
}
